export default class DateTimeUtils {

    /**
     * 获取格式化后当前日期时间
     * @returns {Date}
     */
    static getNow() {
        return DateTimeUtils.formatDateTime(new Date());
    }

    /**
     * 格式化日期日期
     * @param date
     * @returns {string}
     */
    static formatDate(date) {
        const year = date.getFullYear();
        const month = String(date.getMonth() + 1).padStart(2, '0');
        const day = String(date.getDate()).padStart(2, '0');
        return `${year}-${month}-${day}`;
    }

    /**
     * 格式化时间
     * @param date
     * @returns {string}
     */
    static formatTime(date) {
        const hours = String(date.getHours()).padStart(2, '0');
        const minutes = String(date.getMinutes()).padStart(2, '0');
        const seconds = String(date.getSeconds()).padStart(2, '0');
        return `${hours}:${minutes}:${seconds}`;
    }

    /**
     * 格式化日期时间
     * @param date
     * @returns {string}
     */
    static formatDateTime(date) {
        const formattedDate = DateTimeUtils.formatDate(date);
        const formattedTime = DateTimeUtils.formatTime(date);
        return `${formattedDate} ${formattedTime}`;
    }

    /**
     * 解析日期时间
     * @param date
     * @returns {Date}
     */
    static parseDateTime(date) {
        return new Date(date);
    }

    /**
     * 增加天数
     * @param date
     * @param days
     * @returns {Date}
     */
    static addDays(date, days) {
        const result = new Date(date);
        result.setDate(result.getDate() + days);
        return result;
    }

    /**
     * 获取两日期时间相差天数
     * @param date1
     * @param date2
     * @returns {number}
     */
    static diffInDays(date1, date2) {
        const timeDiff = Math.abs(date2.getTime() - date1.getTime());
        return Math.ceil(timeDiff / (1000 * 3600 * 24));
    }

    /**
     * 获取时间戳
     * @param date
     * @returns {number}
     */
    static getTimestamp(date) {
        return date.getTime();
    }

}
